<%--
*
* 下载导出数据文件
*
--%>
<%@page language="java" pageEncoding="UTF-8"%> 
<%@page import="java.io.FileInputStream"%>   
<%@page import="java.io.OutputStream"%>   
<%@page import="java.net.URLEncoder"%> 
<%@ page import="com.sky.fisher.service.FisherService" %>
<%@ page import="org.apache.commons.logging.Log"%>
<%@ page import="org.apache.commons.logging.LogFactory"%>
<%@ page import="com.sky.common.string.StringUtils"%>
<jsp:directive.page import="java.net.URLDecoder"/>
<jsp:directive.page import="java.text.SimpleDateFormat"/>
<jsp:directive.page import="java.util.Date"/>
<jsp:directive.page import="java.io.File"/>
<jsp:directive.page import="com.toncen.samepms.common.ComitConstant"/>
<%
	Log logger = LogFactory.getLog(FisherService.class);
	String filetype = request.getParameter("filetype");//下载文件类型，指定下载显示名称则不需要此参数
    String downloadfile = request.getParameter("downloadfile");//下载文件完整路径
    String displayfile = request.getParameter("displayfile");//下载显示文件名称(带后缀)，没有指定默认为系统毫秒数+.+xls
    String encode = request.getParameter("encode");//传递参数时使用的编码，没有指定默认为UTF-8
    if(StringUtils.isEmpty(downloadfile)){//下载文件没有指定
        logger.error("未指定下载文件，请与系统管理员联系！");
    	throw new Exception("未指定下载文件，请与系统管理员联系！");
    }
    if(StringUtils.isEmpty(filetype)){//下载文件类型没有指定
    	logger.debug("未指定下载文件类型，系统将使用默认文件类型【xls】...");
    	filetype = "xls";   
    }     
    if(StringUtils.isEmpty(displayfile)){//下载文件显示名称没有指定
    	logger.debug("未指定下载文件显示名称，系统将使用默认名称【yyyyMMdd-HHmmss."+filetype+"】...");
        displayfile=new  SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date())+"."+filetype;
    	//displayfile = System.currentTimeMillis()+".xls";   
    }   
    if(StringUtils.isEmpty(encode)){//下载文件显示名称没有指定
    	logger.debug("未指定参数字符集，系统将使用默认字符集【UTF-8】...");
    	encode = "UTF-8";   
    }       
    downloadfile = URLDecoder.decode(downloadfile, encode);  
    displayfile = URLDecoder.decode(displayfile, encode);  
    File download=new File(downloadfile);
    if(download.exists()){
    	if(!ComitConstant.isDownloadPath(download)){//判断是否允许下载
	    	logger.error("文件【"+download.getName()+"】不允许下载，请与系统管理员联系！"); 
	    	throw new Exception("文件【"+download.getName()+"】不允许下载，请与系统管理员联系！");    	
    	}
    	response.setContentType("application/x-download"); 
    	response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(displayfile,encode));//设置下载文件名称
    	response.addHeader("Content-Length",String.valueOf(download.length())); //设置下载文件大小 
	    OutputStream outp = null;   
	    FileInputStream in = null;   
	    try {   
	        outp = response.getOutputStream();   
	        in = new FileInputStream(downloadfile);   
	        byte[] b = new byte[1024];   
	        int i = 0;   
	        while ((i = in.read(b)) > 0) {   
	            outp.write(b, 0, i);   
	        }   
	        outp.flush();   
	    } catch (Exception e) {  
	    	if(ComitConstant.isDeveloperMode()){ 
		        logger.error("下载【"+download.getName()+"】失败："+e.getMessage(),e); 
		        throw e;  
	        }
	    } finally {   
	        if (in != null) {   
	            in.close();   
	            in = null;   
	        }   
	        if (outp != null) {   
	            outp.close();   
	            outp = null;   
	            // tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法   
	            //out.clear();   
	            //out = pageContext.pushBody();   
	        }   
	    }
    }else{
    	logger.error("文件【"+download.getName()+"】不存在，请与系统管理员联系！"); 
    	throw new Exception("文件【"+download.getName()+"】不存在，请与系统管理员联系！");
    } 
%>  
<script>
	try{//将当前页面聚焦
	   window.focus();
	   window.close();//关闭窗口
	}catch(e){}
</script>
